#ifndef DOWNLOADFILECOMMAND_H
#define DOWNLOADFILECOMMAND_H

#include "base_command.h"
#include <QString>
#include <QNetworkReply>

// DownloadFileCommand 命令类
// 负责下载文件
class DownloadFileCommand : public BaseCommand
{
    Q_OBJECT

public:
    explicit DownloadFileCommand(QObject *parent = nullptr);
    ~DownloadFileCommand();
    
    // 设置 QNetworkAccessManager 实例（重写基类方法以连接信号）
    void setNetworkAccessManager(QNetworkAccessManager *networkManager);
    
    // 执行命令
    // url: 相对URL（可选，用于构建本地保存目录结构）
    // fileName: 文件名（可选）
    // fileId: 文件ID（必需）
    // 返回：是否成功发起请求（异步操作，实际结果通过信号通知）
    bool execute(const QString &url, const QString &fileName, const QString &fileId);

signals:
    // 文件下载完成信号
    void downloadFileCompleted(int resultCode, const QString &message, const QString &filePath);
    
    // 文件下载进度信号
    void downloadProgress(qint64 bytesReceived, qint64 bytesTotal);

private slots:
    // 处理下载文件响应
    void handleDownloadFileResponse(QNetworkReply *reply);

private:
    // 构建请求 URL
    QString buildRequestUrl(const QString &baseUrl, const QString &fileId);

private:
    QString m_pendingUrl; // 待下载的相对URL
    QString m_pendingFileName; // 待下载的文件名
    QString m_pendingFileId; // 待下载的文件ID
};

#endif // DOWNLOADFILECOMMAND_H

